home *** CD-ROM | disk | FTP | other *** search
/ PC Media 22 / PC MEDIA CD22.iso / share / prog / txtmenu1 / txtfunc.cpp < prev    next >
C/C++ Source or Header  |  1993-01-01  |  9KB  |  346 lines

  1. /*
  2.         About       TXTMENU
  3.  
  4. This program is to generate a txt-menu in DOS. It is mainly for users to
  5. develop their own txt-based menu. It reads the .cfg file to get the menu
  6. contents and return diffrerent value to indicate the select result.
  7. It has wonderful sound effect and some time counting facility. Besides,
  8. it includes all SOURCE CODE !
  9.  
  10. To start it just type the exe file and the program will work.
  11.  
  12. With  SOURCE CODE , you can easily modify it for your own purpose.
  13. You can distribute the source code freely only together with this readme
  14. file. Since this is a shareware, you are required to register in order
  15. to use it in your own program. It will only cost you $50. 
  16.  
  17. However, if you do not like to pay so much, you can also pay as much as you 
  18. wish to register. Just think the time and energe you will save by this
  19. program !
  20.  
  21. After you register for this program, you will get permission to 
  22. include the source code to your own program. Besides,you will also
  23. get more detailed comments of the source code and you can get answers
  24. from author about any programming problems without extra fee.
  25.  
  26. Money and Check should mail to:
  27.  
  28. Mr. Yongyong Xu,
  29. 1940 Howard Street. Apt. 333,
  30. Kalamazoo, MI 49008
  31. U.S.A.
  32.  
  33. Telephone: (616) 387-7569
  34. EMail:  yxu@cs.wmich.edu   (prefered)
  35.             or
  36.         99xu1@grog.lab.cc.wmich.edu
  37.  
  38. When you cannot reach me by the above address, try the next:
  39. -----------------------------------------------------------------------
  40. <Permanet Home Address>
  41.  
  42. Mr. Xu Yongyong,
  43. Building 34 Room 604,
  44. HuayuanXinCun , Chang Zhou
  45. Jiang Su Province 213016
  46. P.R.China
  47.  
  48. Tel:(86)-(519)-(328-0177)
  49.  
  50.  
  51. */
  52. #include <stdlib.h>
  53. #include <dos.h>
  54. #include <conio.h>
  55. #include <string.h>
  56. #include <stdio.h>
  57.  
  58. #include "txtfunc.h"
  59.  
  60. void    back(int x1,int y1,int x2,int y2,int mode);
  61. void    cursor_off();
  62. void    cursor_on();
  63. void    display_on();
  64. void    display_off();
  65. char    *char_malloc(short length);
  66.  
  67. void    back(int x1,int y1,int x2,int y2,int mode)
  68. {
  69. int     i,j;
  70. int     chare;
  71.         if (mode==0) chare=176;
  72.         else chare=178;
  73.         for(i=x1;i<=x2;i++) {
  74.                 for(j=y1;j<=y2;j++) {
  75.                         gotoxy(i,j);
  76.                         cprintf("%c",chare);
  77.                 }
  78.         }
  79. }
  80.  
  81. void    rect(int x1,int y1,int x2,int y2,int mode)
  82. {
  83. int     i;
  84. int     r1,r2,r3,r4,r5,r6;
  85.         if (mode==0) {
  86.                 r1=218;r2=191;r3=192;r4=217;r5=179;r6=196;
  87.         }
  88.         else {
  89.                 r1=201;r2=187;r3=200;r4=188;r5=186;r6=205;
  90.         }
  91.         if (x1!=x2 && y1!=y2) {
  92.                 gotoxy(x1,y1);cprintf("%c",r1);
  93.                 gotoxy(x1,y2);cprintf("%c",r3);
  94.                 gotoxy(x2,y1);cprintf("%c",r2);
  95.                 gotoxy(x2,y2);cprintf("%c",r4);
  96.         }
  97.         else if (x1==x2) {
  98.                 gotoxy(x1,y1);cprintf("%c",r5);
  99.                 gotoxy(x1,y2);cprintf("%c",r5);
  100.         }
  101.         else if (y1==y2) {
  102.                 gotoxy(x1,y1);cprintf("%c",r6);
  103.                 gotoxy(x2,y1);cprintf("%c",r6);
  104.         }
  105.         for (i=x1+1;i<=x2-1;i++) {
  106.                 gotoxy(i,y1);
  107.                 cprintf("%c",r6);
  108.                 gotoxy(i,y2);
  109.                 cprintf("%c",r6);
  110.         }
  111.         for(i=y1+1;i<=y2-1;i++) {
  112.                 gotoxy(x1,i);
  113.                 cprintf("%c",r5);
  114.                 gotoxy(x2,i);
  115.                 cprintf("%c",r5);
  116.         }
  117. }
  118.  
  119. void    face()
  120. {
  121. char    s[80];
  122. display_off();
  123. textmode(C80);
  124. textcolor(WHITE);
  125. //textbackground(CYAN);
  126. textbackground(color1);
  127. window(1,1,80,25);
  128. clrscr();
  129. back(1,1,80,21,0);
  130. textcolor(YELLOW);
  131. back(1,22,80,22,1);
  132. textcolor(WHITE);
  133. rect(2,23,79,25,1);
  134. gotoxy(5,24);
  135. textcolor(LIGHTRED);
  136. cprintf("Enter");
  137. textcolor(WHITE);
  138. cprintf("=Continue    ");
  139. textcolor(LIGHTRED);
  140. cprintf("Esc");
  141. textcolor(WHITE);
  142. cprintf("=Cancel");
  143. window(10,3,70,6);
  144. //textbackground(LIGHTBLUE);
  145. textbackground(color2);
  146. clrscr();
  147. window(1,1,80,25);
  148. rect(10,3,70,6,0);
  149.  
  150. gotoxy(11+ (70-10-strlen(title0))/2 ,4);
  151. cprintf("%s",title0);
  152. gotoxy(11+ (70-10-strlen(title1))/2 ,5);
  153. cprintf("%s",title1);
  154. display_on();
  155. free(s);
  156. }
  157.  
  158. void    cursor_off()
  159. {
  160. union REGS r;
  161.         r.h.ah=0x1;
  162.         r.h.ch=0x20;
  163.         r.h.cl=0x8;
  164.         int86(0x10,&r,&r);
  165. }
  166.  
  167. void    cursor_on()
  168. {
  169. union REGS r;
  170.         r.h.ah=0x1;
  171.         r.h.ch=0x6;
  172.         r.h.cl=0x7;
  173.         int86(0x10,&r,&r);
  174. }
  175.  
  176. void    display_off()
  177. {
  178. union REGS r;
  179.         r.h.ah=0x12;
  180.         r.h.al=0x01;
  181.         r.h.bl=0x36;
  182.         int86(0x10,&r,&r);
  183. }
  184.  
  185. void    display_on()
  186. {
  187. union REGS r;
  188.         r.h.ah=0x12;
  189.         r.h.al=0x00;
  190.         r.h.bl=0x36;
  191.         int86(0x10,&r,&r);
  192. }
  193. /***************************************************************************
  194.  *         Module name : inputstring( x, y, instr,)                        *
  195.  *         Argument : x      int, horizonal position.                      *
  196.  *                    y      int, vertical position.                       *
  197.  *                    instr  pointer to default and input                  *
  198.  *                           string.                                       *
  199.  *         Function : Input a string at the position                       *
  200.  ***************************************************************************/
  201. void    inputstring(int x,int y,char * instr)
  202. {
  203. char    ch[2];
  204. int     xcount, notok, term, i, first,xpos;
  205.                                         /*xpos:where is cursor now      */
  206. char    *char_tmp;
  207.     char_tmp=char_malloc(20);
  208.         strcpy(char_tmp,instr);
  209.         first=1;                                /*flag for input_char first?    */
  210.         term=0;                                 /*ok?                           */
  211.     xcount=strlen(instr);                   /*length of instr               */
  212.     textcolor(BLACK);
  213.     textbackground(WHITE);
  214.     gotoxy(x,y);                        /* print default string         */
  215.         cputs(instr);
  216.         cursor_on();
  217.         notok = 1;                              /*1:char invalid                */
  218.                                                 /*0:char valid                  */
  219.         do{
  220.         ch[0] = getch();
  221.         ch[1] = '\0';
  222.         if( strlen( ch ) == 1) {
  223.         if( ch[0] == ESC ) {            /*ESC means no chang and quit   */
  224.             zxexit();
  225.         /*
  226.                         notok = 0;
  227.                         strcpy(instr,char_tmp);
  228.                         term=1;
  229.             first = 0;*/
  230.                 }
  231.                 else if( ch[0] == ENTER ) {     /*ENTER means permit the chang  */
  232.                         notok = 0;
  233.                         term=1;
  234.                         first = 0;
  235.                 }
  236.                 else if(ch[0]=='\t'){
  237.                         notok=1;
  238.                         term=0;
  239.                         first=1;
  240.                 }
  241.                 else if( ch[0] == BACKSPACE ) {
  242.                         xpos=wherex();
  243.                         if(xcount >= 1) {
  244.                                 instr[xpos-x-1] = '\0';
  245.                                 gotoxy( x, y );
  246.                                 for( i = 0; i < xcount; i ++ )   /* delete the old string */
  247.                                         putch(' ');
  248.                                 gotoxy( x, y );
  249.                                 cputs( instr );                 /* write a new string */
  250.                                 xcount --;
  251.                                 notok = 0;
  252.                         }
  253.                         else {
  254.                                 notok=1;
  255.                         }
  256.                         first = 0;
  257.                         term = 0;
  258.                 }
  259.                 else {
  260.                         if( first ) {
  261.                                 first =0;
  262.                                 xcount = 0;
  263.                                 gotoxy(x, y);
  264.                                 for(i=0;i<strlen(instr);i++)    /* delete the old string */
  265.                                         putch(' ');
  266.                                 instr[0] = '\0';                /* clear the string */
  267.                                 strcat( instr, ch );
  268.                                 gotoxy( x + xcount, y );
  269.                                 cputs( ch );
  270.                                 xcount ++;
  271.                                 notok = 0;
  272.                                 term=0;
  273.                         }
  274.                         else{
  275.                                 xpos=wherex();
  276.                                 xcount ++;
  277.                 if(xcount <= 20 ) {
  278.                                         strcat( instr, ch );
  279.                                         gotoxy( xpos , y );
  280.                                         cputs( ch );
  281.                                         notok = 0;
  282.                                 }
  283.                                 else {
  284.                                         xcount --;
  285.                                         notok = 1;
  286.                                 }
  287.                                 term=0;
  288.                         }
  289.                 }
  290.         }
  291.         else {
  292.                 ch[1]=getch();
  293.                 notok=1;
  294.                 term=0;
  295.         }
  296.         if( notok ) putchar(7);
  297.         }while( term == 0 );
  298.         cursor_off();
  299.         free(char_tmp);
  300. }
  301. /*┌─────────────────────────────────────────────────────────────────────────┐
  302.   │ module name:  datainput()                                               │
  303.   │ return:       no                                                        │
  304.   │ argument:     *s                                                        │
  305.   │ function:     input datas in special window,and return datas in s.      │
  306.   └─────────────────────────────────────────────────────────────────────────┘*/
  307. void    datainput(int x,int y,char *s,char *s1)
  308. {
  309. int length;
  310.     length=strlen(s1);
  311.     window(x,y,x+21+length,y+2);
  312.     textcolor(WHITE);
  313.     textbackground(LIGHTBLUE);
  314.     clrscr();
  315.     window(1,1,80,25);
  316.     rect(x,y,x+21+length,y+2,0);
  317.     window(x,y,x+21+length,y+2);
  318.     gotoxy(2,2);
  319.     textcolor(LIGHTCYAN);
  320.     cprintf("%s",s1);
  321.     textcolor(WHITE);
  322.  
  323.     inputstring(2+length,2,s);
  324.     window(1,1,80,25);
  325.     textbackground(BLUE);
  326.     textcolor(WHITE);
  327.     while (*s==' ') strcpy(s, s+1);
  328. }
  329. /*┌─────────────────────────────────────────────────────────────────────────┐
  330.   │ module name:  char_malloc()                                             │
  331.   │ return:       *string                                                   │
  332.   │ argument:     length                                                    │
  333.   │ function:     malloc a string which length is length.                   │
  334.   └─────────────────────────────────────────────────────────────────────────┘*/
  335. char    *char_malloc(short length)
  336. {
  337. char    *tmp;
  338.         if((tmp=(char*)malloc(length))==NULL) {
  339.                 putch(7);
  340.         cprintf("no free space!");
  341.                 zxexit();
  342.         }
  343.         return(tmp);
  344. }
  345.  
  346.